Wikipedia:Manual de estilo/Ciencia informática

Este manual contiene algunas sugerencias que tienen como objetivo contribuir a la redacción de artículos informáticos claros, agradables y, con suerte, interesantes . Esta guía es un complemento del Manual de estilo general .

Estructura sugerida de un artículo de informática

Probablemente la parte más difícil de escribir un artículo técnico sea la dificultad de abordar el nivel de conocimientos técnicos del lector. Un enfoque general es comenzar con algo simple y luego avanzar hacia afirmaciones más formales y técnicas a medida que avanza el artículo. La siguiente estructura es simplemente una recomendación; la discreción editorial y el consenso pueden encontrar una estructura alternativa más apropiada para algunos temas.

Introducción del artículo

El artículo debe comenzar con una sección introductoria de una extensión adecuada al contenido del artículo , que describa el tema en términos generales y resuma adecuadamente el artículo. Este material de apertura debe brindar al lector casual una comprensión rápida del concepto. Nombra el campo o campos de la informática a los que pertenece este concepto y describe el contexto en el que se utiliza el término. Escribe el título del artículo y cualquier nombre alternativo en negrita . Incluye la motivación histórica, proporciona algunos nombres y fechas, etc. A continuación, se incluye un ejemplo:

En informática , la comunicación de procesos secuenciales ( CSP ) es un lenguaje formal para describir patrones de interacción en sistemas concurrentes . Es miembro de la familia de teorías matemáticas de concurrencia conocidas como álgebras de procesos o cálculos de procesos , basadas en el paso de mensajes a través de canales . CSP fue muy influyente en el diseño del lenguaje de programación occam y también influyó en el diseño de lenguajes de programación como Limbo , RaftLib , Erlang , Go , Crystal y core.async de Clojure . CSP fue descrito por primera vez en un artículo de 1978 de Tony Hoare , pero desde entonces ha evolucionado sustancialmente. CSP se ha aplicado prácticamente en la industria como una herramienta para especificar y verificar los aspectos concurrentes de una variedad de sistemas diferentes, como el T9000 Transputer , así como un sistema de comercio electrónico seguro. La teoría de CSP en sí misma también sigue siendo objeto de investigación activa, incluido el trabajo para aumentar su rango de aplicabilidad práctica (por ejemplo, aumentando la escala de los sistemas que se pueden analizar de manera manejable).

Antecedentes y aplicación

Es una buena idea comenzar la parte principal del artículo con una introducción informal, comúnmente titulada "Antecedentes", aunque también se ha utilizado "Descripción general", que le brinda al lector no técnico una comprensión básica de los conceptos fundamentales del tema que se presenta. Si el concepto en cuestión es un tanto teórico, es útil describir su propósito o uso aplicado hacia el comienzo del artículo, ya sea de manera concisa en la sección introductoria o en una sección introductoria posterior. También es útil tener algunos ejemplos representativos , que podrían servir tanto para ampliar el concepto en cuestión como para proporcionar un contexto sobre por qué uno podría querer usar ese concepto.

Una imagen es una excelente manera de transmitir un mensaje y, a menudo, incluso puede preceder a la discusión técnica de un concepto. WP:Cómo crear gráficos para artículos de Wikipedia contiene algunos consejos sobre cómo crear gráficos y otras imágenes, y cómo incluirlos en los artículos.

Si no se incluye en el material introductorio, suele ser útil incluir una sección sobre la historia del concepto, que puede aportar información adicional. Esta sección suele formar su propia sección "Historia".

Estructuración de diferentes tipos de artículos

La informática es un campo amplio que abarca distintos tipos de ideas. La estructura de la parte principal de un artículo variará según el tipo de artículo. A continuación se ofrecen algunas pautas generales para estructurar algunas clases diferentes de artículos sobre informática. Siempre que sea posible, estas pautas incluyen uno o dos ejemplos de un artículo "bueno", es decir , un artículo que demuestre el estilo que buscamos para esa clase particular de artículo. Recuerde siempre que se trata de pautas , no de reglas estrictas: algunos artículos deberán desviarse de esta estructura; algunos artículos serán difíciles de clasificar; algunos no encajarán en estas clasificaciones en absoluto. Utilice el sentido común al aplicar estas pautas.

Algoritmos y estructuras de datos

Un artículo sobre un algoritmo generalmente debe constar de:

  1. Una descripción del algoritmo (incluido pseudocódigo)
  2. Una discusión formal de la complejidad temporal y espacial del algoritmo.
  3. Una discusión sobre cualquier problema de implementación y rendimiento.

Un buen ejemplo es el algoritmo de búsqueda binaria , del que habla un artículo destacado .

Un artículo sobre una estructura de datos debe constar de:

  1. Una descripción de la estructura y de cualquier operación que se pueda realizar en ella.
  2. Una visión general de las aplicaciones para la estructura en cuestión
  3. Una discusión sobre cualquier problema de implementación y rendimiento.

Problemas clásicos

Un artículo que describe un problema clásico generalmente debe constar de:

  1. Un enunciado del problema.
  2. Una discusión sobre la relevancia del problema.
  3. Una discusión de la historia del problema si es notable.
  4. Una descripción de las soluciones al problema, si existen.

Un ejemplo es el problema de los filósofos comedores .

Patrones de diseño

La estructura de un artículo que describe un patrón de diseño de software u otro patrón de diseño en informática (incluidos los patrones de creación , los patrones estructurales , los patrones de comportamiento y los patrones de concurrencia ) debe basarse en los modelos de mejores prácticas de la industria proporcionados por fuentes confiables sobre el tema. Algunos de estos incluyen:

  • Patrones de diseño: elementos de software orientado a objetos reutilizables, de Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides (la "Banda de los Cuatro" o GoT; 1994, Addison-Wesley / O'Reilly). Nuestro artículo sobre el libro en Design Patterns § Patterns by type incluye enlaces a varios artículos sobre patrones de diseño.
  • Patrones de diseño para el desarrollo de software orientado a objetos por Wolfgang Pree (1995, Addison-Wesley)
  • Hay varios trabajos sobre patrones de diseño para lenguajes específicos y otras aplicaciones disponibles para lectura gratuita a través de la Biblioteca Abierta de Internet Archive [1], y muchos otros están alojados en sitios web gratuitos.

Campos de estudio

Un artículo que describa un campo de estudio dentro de la informática debe incluir:

  1. Una breve descripción de la historia del campo
  2. Una introducción básica a los conceptos clave en torno a los cuales gira el campo.
  3. Una descripción de los principios, teoremas o resultados importantes producidos por el campo.
  4. Una discusión sobre las relaciones con otros campos de estudio (dentro y fuera de la informática)
  5. Algunas referencias a artículos que describen aspectos particulares del campo con mayor detalle

Formalismos

Un artículo que describa algún tipo de formalismo debe contener:

  1. Un breve resumen de la historia del formalismo (originador, principales desarrollos, etc.)
  2. Una introducción informal a los conceptos básicos involucrados (preferiblemente incluyendo algunos ejemplos simples)
  3. Una definición formal
  4. Discusión de aplicaciones o implementaciones importantes
  5. Descripción de las principales herramientas que apoyan el formalismo
  6. Breve descripción de los formalismos relacionados o derivados

Un buen ejemplo es el cálculo lambda .

Construcciones de programación

Un artículo que describe una construcción de programación generalmente debe incluir:

  1. Una breve descripción general de qué es el constructo y cómo se utiliza (quizás incluyendo una semántica operativa informal )
  2. Una lista de nombres alternativos para el constructo
  3. Pseudocódigo o una pequeña muestra de código que demuestra el uso del constructo
  4. Descripción de cualquier equivalencia entre el constructo y otros constructos
  5. Una discusión de cualquier variación en la semántica del constructo.
  6. Una discusión sobre las desventajas del uso del constructo

Los ejemplos incluyen continuación , cierre (programación informática) y manejo de excepciones .

Lenguajes de programación

Un artículo que describe un lenguaje de programación generalmente debe incluir al menos:

  1. Un breve resumen de la historia de la lengua
  2. Una descripción general de las características del lenguaje
    • Paradigma(s) de programación que el lenguaje admite y qué tan bien los admite
    • Estilo de verificación de tipos, soporte para diseño por contrato u otras técnicas de especificación
    • Estilo de gestión de la memoria
  3. Una introducción básica a la sintaxis del lenguaje (incluidos algunos ejemplos de código)
  4. Una descripción general de la semántica formal del lenguaje (si existe)
  5. Una lista de implementaciones disponibles y plataformas compatibles

Un buen ejemplo es el artículo sobre Rust (lenguaje de programación) .

Teoremas y conjeturas

Un artículo que describe teoremas o conjeturas generalmente debe contener al menos:

  1. Una breve descripción informal del teorema o conjetura.
  2. Una declaración formal del teorema o conjetura.
  3. Una discusión de la historia del teorema o conjetura.
  4. Una discusión de los impactos, consecuencias o implicaciones del teorema o conjetura.

Como muchos teoremas y conjeturas de la ciencia informática suelen enunciarse de manera informal en la literatura popular, también puede ser beneficioso proporcionar algún debate sobre conceptos erróneos o malas interpretaciones comunes del teorema o la conjetura.

Los nombres de tales cosas no se escriben con mayúscula, excepto cuando contienen un nombre propio (por ejemplo, un apellido).

Buenos ejemplos incluyen el problema de la detención y la tesis de Church-Turing .

Herramientas

Un artículo que describe una clase de herramientas generalmente debe contener:

  1. Una breve descripción general del propósito de la herramienta
  2. Una breve historia del desarrollo de la clase de herramienta
  3. Discusión de las principales subclases de la clase de herramientas
  4. Breve descripción de los algoritmos subyacentes clave o técnicas de implementación

Los ejemplos incluyen compilador , editor de texto y demostración automática de teoremas .

Cuestiones finales

Consulte WP:Manual de estilo/diseño § Apéndices y pies de página estándar para el uso de las secciones "Véase también", "Notas", "Referencias", "Enlaces externos" y plantillas de navegación.

Pautas de estilo

Ejemplos de código

  • MOS:CÓDIGO
  • MOS:FUENTE
  • MOS:SINTAXIS

Se incluyen muestras de fuentes reales en los artículos por diversas razones, aunque las más típicas son demostrar el "aspecto" de un lenguaje en particular, proporcionar ejemplos de construcciones o características específicas del lenguaje y proporcionar ejemplos de algoritmos que no se expresan fácilmente en pseudocódigo. Si bien no hay nada inherentemente malo en incluir código de muestra, una cantidad excesiva de este puede restar valor al contenido del artículo en sí; evite escribir código de muestra a menos que contribuya significativamente a una comprensión fundamental del contenido enciclopédico.

Wikipedia no es un repositorio de código fuente . El código que no sea relevante para el contenido enciclopédico debe ser sacado de Wikipedia. WikiLibros es el proyecto Wikimedia apropiado para el código existente compatible con GFDL; en particular Wikilibros:Implementación de algoritmos. Los wikis externos LiteratePrograms y Rosetta Code son lugares apropiados para colocar nuevas implementaciones de muestra, junto con descripciones de cómo funcionan esas implementaciones. Nota importante: las implementaciones existentes en Wikipedia no pueden transferirse al wiki de LiteratePrograms porque el contenido de Wikipedia está licenciado bajo la licencia GFDL y/o CC-BY-SA , mientras que LiteratePrograms usa la licencia más liberal MIT/X11 ; volver a licenciar el código existente de GFDL/CC-BY-SA a MIT/X11 requeriría el permiso de todos los titulares de derechos de autor.

Algunas pautas generales sobre ejemplos de código:

  • Las implementaciones de muestra de algoritmos están bien, pero cada artículo sobre algoritmos debería incluir una descripción en pseudocódigo del algoritmo principal cuando sea posible, de modo que cualquiera pueda entender cómo funciona el algoritmo. Vea a continuación las pautas sobre pseudocódigo.
  • El ejemplo debe utilizar un lenguaje que ilustre claramente el algoritmo para un lector que no esté familiarizado con el lenguaje, incluso si cree que el lenguaje es muy conocido. Para mantener la neutralidad en cuanto al lenguaje, elija lenguajes en función de la claridad, no de la popularidad. Los lenguajes que enfatizan la legibilidad, como Python y Ruby , son buenas opciones. Evite operaciones esotéricas o específicas del lenguaje.
  • Las implementaciones del código fuente deben ser compatibles con las licencias GFDL y CC-BY-SA (que son incompatibles con la GPL ).
  • No es adecuado utilizar varias implementaciones de código fuente a menos que contrasten aspectos específicos del código y que ese contraste sea importante para el contenido enciclopédico del artículo. Si es posible, acentúe las diferencias proporcionando la implementación alternativa en el mismo idioma que el original.
  • Todos los ejemplos de código deben marcarse utilizando uno de los siguientes métodos:
    • Alrededor de un breve ejemplo de código en línea <code>...</code>o<syntaxhighlight lang="x" inline>
    • Rodear un bloque de código con etiquetas <syntaxhighlight lang="x">o<pre>...</pre>
    • Sangrar cada línea de un bloque de código con uno o más espacios (a diferencia del método anterior, esto le permite usar formato de texto básico como cursiva, negrita, etc. en la muestra). Esto los compone en una tipografía monoespaciada para garantizar que se conserve el espaciado y proporciona información adicional a los lectores de pantalla y a los usuarios con CSS personalizado. Hacer esto es particularmente importante para los idiomas donde el espacio en blanco tiene importancia sintáctica; idealmente nos gustaría que las personas pudieran copiar y pegar el código de muestra en un editor de texto o IDE. Por ejemplo,
int principal(vacío) { printf("hola, mundo\n"); devuelve 0;}
  • El resaltado de sintaxis se puede obtener utilizando la etiqueta SyntaxHighlight de MediaWiki en lugar de <pre>...</pre>, con un atributo específico langque especifique el nombre del idioma (el valor wikitextse utiliza para el marcado de MediaWiki). Consulte Extension:SyntaxHighlight para conocer los idiomas admitidos. El siguiente es un código Java resaltado por sintaxis, por ejemplo, utilizando <syntaxhighlight lang="java">:
clase  HolaMundo { public static void main ( String [] args ) { System . println ( " ¡Hola Mundo!" ); // Imprimir "¡Hola Mundo! " } }          
  • Dado que los listados de código no se ajustan a las líneas y muchas personas leen Wikipedia en entornos con limitaciones de espacio, asegúrese de que los listados de código tengan una longitud máxima de línea de 60 caracteres. Aplique el ajuste de línea manual si es necesario.

Algoritmos

  • MOS:ALGO
  • MOS: PSEUDOCODIGO

No existen estándares universalmente aceptados para presentar algoritmos en Wikipedia. Un intento anterior de estandarizar un pseudocódigo está archivado en User:Dcoetzee/Wikicode , aunque "[e]l autor recomienda que no se vuelva a presentar una propuesta de este tipo, ya que es poco probable que obtenga el consentimiento". Dentro del WikiProject Computer science , el consenso general ha sido que, siempre que sea posible, los algoritmos deben presentarse en pseudocódigo. El uso de pseudocódigo es completamente independiente del lenguaje y es más NPOV con respecto a los lenguajes de programación en general. El pseudocódigo también proporciona mucha más flexibilidad con respecto al nivel de detalle de implementación, lo que permite que los algoritmos se presenten al nivel más alto que se requiera para centrarse en el algoritmo y sus ideas centrales, en lugar de en los detalles de cómo se implementa. Finalmente, el pseudocódigo de alto nivel adecuado proporciona la presentación más accesible de un algoritmo, en particular para los no programadores.

Ejemplo

El algoritmo Ford-Fulkerson se  ingresa como: Gráfico G con capacidad de flujo c , nodo fuente s , Nodo sumidero t  salida: Flujo f tal que f es máximo desde s hasta t (Tenga en cuenta que f (u,v) es el flujo del nodo u al nodo v, y c (u,v) es la capacidad de flujo del nodo u al nodo v) para cada arista ( u , v ) en  G E  do  f ( u , v ) ← 0 f ( v , u ) ← 0 mientras exista un camino p desde s hasta t  en la red residual G f  do sea c f la capacidad de flujo de la red residual G f  c f ( p ) ← min{ c f ( u , v ) | ( u , v ) en  p } para cada arista ( u , v ) en  p  do  f ( u , v )f ( u , v ) + c f ( p ) f ( v , u ) ← − f ( u , v ) devolver  f

Pautas generales para escribir pseudocódigo

  • Asegúrese de que el algoritmo sea comprensible sin tener que leer esta página primero.
  • Intente centrarse en delinear el algoritmo y, cuando sea posible, mantenga la discusión y la explicación del algoritmo fuera del pseudocódigo.
  • Todos los operadores de asignación, comparación y otros operadores matemáticos deben representarse con símbolos matemáticos adecuados siempre que sea posible:
Símbolos para utilizar en pseudocódigo
OperadorResultadoEntidadEjemplo
Asignación← o :=←, :=c ← 2πr, c := 2πr
Comparación=, ≠, <, >, ≤, ≥=, ≠, <, >, ≤, ≥
Aritmética+, −, ×, /, módulo+, ±, ×, /, mod
Piso/techo⌊, ⌋, ⌈, ⌉&lpiso;, &rpiso;, ⌈, ⌉a ← ⌊b⌋ + ⌈c
Lógicoy , o'''y''', '''o'''ab and ac
Sumas∑ ∏∑ ∏h ← ∑aA 1/a
Pseudocódigo de bajo nivel
  • Todas las palabras clave de la estructura de control deben estar en negrita y los comentarios deben estar en cursiva (además de cualquier otra forma utilizada para indicar comentarios).
  • Intente mantener la descripción del algoritmo en un nivel suficientemente alto para evitar la mayoría de los detalles específicos de la implementación.
  • Intente evitar utilizar estructuras o técnicas que sean idiomáticas de un lenguaje o paradigma de programación en particular.
  • Si las estructuras o técnicas idiomáticas son inevitables, intente presentarlas de una manera genérica y de alto nivel, de acuerdo con el estilo que se describe a continuación:
  • La estructura condicional preferida es
si condición entonces  código ruta de lo contrario si condición entonces  código ruta de lo contrario  código ruta fin si
  • Las construcciones de bucle preferidas son
mientras que la condición hace que  el código bloquee la repetición
y
para loop_control hacer  código bloque repetir
¿Dónde loop_controlestá cualquier cláusula adecuada para controlar un bucle for, como por ejemplo item in listo 1 ≤ i ≤ netc.?
  • La estructura de definición de función preferida es
función nombre_función es  un bloque de código  que retorna la variable fin de la función
donde function_namees cualquier formato razonable de nombre de función y argumentos. Alternativamente, las entradas y salidas se pueden especificar dentro del bloque de función:
función nombre_función es  entrada:  descripción de las entradas  salida:  descripción de las salidas  bloque de código variable de retorno fin de función
  • Los bloques de código deben tener sangría. Si es suficientemente claro, se pueden omitir las palabras clave de cierre de bloque ( end , repeat , etc.).

En la página Algoritmo se ofrece un ejemplo de pseudocódigo que sigue aproximadamente estas pautas como ejemplo , y en Ordenamiento por cubos , Ordenamiento topológico y Algoritmo rho de Pollard .

Pseudocódigo de alto nivel
Descripción de las entradas de los argumentos de entrada
Descripción de salida de las salidas
  1. (descripción de un paso del algoritmo)
  2. (el siguiente paso en el algoritmo)
    1. (subpaso)
  3. (etc.)
Usando marcado:
: '''Entradas'''  ''descripción de los argumentos de entrada'' : '''Salida'''  ''descripción de las salidas'' :#  ''(descripción de un paso en el algoritmo)'' :#  ''(el siguiente paso en el algoritmo)'' :##  ''(subpaso)'' :#  ''(etc.)''
  • Las descripciones de los pasos deben ser de alto nivel y pueden ser simplemente oraciones en inglés.
  • Los subpasos del algoritmo, debidos a condiciones de bifurcación o estructuras de bucle, deben estar sangrados y subnumerados.
  • La terminación del algoritmo con un valor de retorno debe indicarse mediante la palabra clave return

Algunos ejemplos de algoritmos en este formato incluyen el algoritmo de Buchberger , el algoritmo de Pohlig-Hellman , el algoritmo de inversión de Itoh-Tsujii , el algoritmo Baby-step giant-step y el algoritmo p  − 1 de Pollard .

Incluyendo referencias

Es fundamental que el contenido del artículo sea verificable con fuentes confiables , una lista de referencias bien elegida y referencias a la literatura. Cualquier cita, cualquier material cuestionado o que pueda ser cuestionado y cualquier afirmación que involucre a una persona viva debe estar respaldada por una cita en línea a una fuente secundaria confiable. Algunas razones adicionales para citar fuentes de alta calidad son las siguientes:

  • La inclusión de citas de fuentes adecuadas permite que otros editores y nuestros lectores verifiquen la información proporcionada y evalúen las fuentes. Esto es especialmente importante en cualquier tema científico, ya que el estado del arte siempre está avanzando.
  • El lector puede desear más detalles, pero Wikipedia no sustituye a un libro de texto (para eso está Wikilibros ). Muchos artículos de investigación y libros útiles para los principiantes en la materia están ahora disponibles gratuitamente en línea.
  • Algunas nociones se definen de forma diferente según el contexto o el autor. Los artículos requieren referencias que respalden el uso dado y deben identificar los usos conflictivos (dando la debida importancia a las fuentes).
  • Los algoritmos, teoremas o definiciones importantes deben citar los artículos que originaron el concepto como información histórica y técnica, además de los trabajos de referencia secundarios posteriores en los que se basa el contexto moderno y aplicado.

Las fuentes primarias deben usarse con cuidado. Por lo general, se permiten para afirmaciones no controvertidas y no promocionales sobre el tema o su(s) autor(es). Ejemplos: hacer referencia a una publicación de blog del equipo de desarrollo del lenguaje de programación Rust es suficiente para un punto sobre la arquitectura interna del compilador Rust o la motivación detrás de una decisión específica sobre el diseño del lenguaje Rust. Sin embargo, dicha fuente no se puede usar para proporcionar puntos de referencia de Rust o contrastar las características de Rust con las de otro lenguaje, ya que dichas afirmaciones de los desarrolladores pueden tener un elemento promocional e involucrar análisis, evaluación, interpretación o síntesis de hechos y evidencia, lo que requiere una fuente secundaria .

Wikipedia no impone un estilo específico de referencia y cita ; simplemente utiliza uno de manera consistente dentro de un artículo en particular.

Consulte WP:Citar fuentes para saber cómo citar fuentes correctamente.

Véase también

Lectura adicional

  • Zobel, Justin (2004). Writing for Computer Science (Escribir para la informática ) (2.ª ed.). Springer. ISBN 1-85233-802-4.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Wikipedia:Manual_of_Style/Computer_science&oldid=1255583503#Code_samples"